/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.reportes;

import com.mindbox.mueblesalpes.negocio.cliente.ClienteServiceLocal;
import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.Ciudad;
import com.mindbox.mueblesalpes.negocio.utilidades.IUtilidades;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import com.mindbox.mueblesalpes.presentacion.utils.ReglasNavegacion;
import com.mindbox.mueblesalpes.presentacion.utils.RequestParameters;
import com.mindbox.mueblesalpes.presentacion.utils.SelectUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Jaimoto
 */

public class ReportesBean {


    private boolean top;
    private boolean ventas;
    private boolean compras;
    private boolean mostrarCliente;
    private String reporte;
    private List<SelectItem> opciones;
    private List<SelectItem> clientes;
    private List<SelectItem> ciudades;
    private String idCiudad;
    private String idCliente;
    private Date fechaIni;
    private Date fechaFin;
    private Ciudad ciudad;
    private Cliente cliente;
    @EJB
    private ClienteServiceLocal clienteEjb;
    @EJB
    private IUtilidades utils;

    /** Creates a new instance of ReportesBean */
    public ReportesBean() {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
            opciones = new ArrayList();
            opciones.add(new SelectItem("0", "Seleccionar Reporte"));
            opciones.add(new SelectItem("1", bundle.getString("reporte.top.title")));
            opciones.add(new SelectItem("2", bundle.getString("reporte.ventas.title")));
            opciones.add(new SelectItem("3", bundle.getString("reporte.compras.title")));
            cliente = new Cliente();
            ciudad = new Ciudad();
            fechaFin = new Date();
            fechaIni = new Date();
            ciudades = new ArrayList<SelectItem>();
            clientes = new ArrayList<SelectItem>();
            top = false;
            ventas = false;
            compras = false;
            mostrarCliente = true;
        } catch (Exception e) {
            e.printStackTrace();
            Mensajes.asignarMensajeError("Se produjo un error al cargar los datos");
        }
    }

    /**
     * Accion que realiza el cambio de reporte seleccionado
     * @return regla de navegación
     */
    public String cambiarReporte(){
        if(getReporte().equals("1")){
            setTop(true);
            setVentas(false);
            setCompras(false);
            setMostrarCliente(false);
        }else if(getReporte().equals("2")){
            setVentas(true);
            setCompras(false);
            setTop(false);
            setMostrarCliente(false);
        }else if(getReporte().equals("3")){
            setCompras(true);
            setVentas(false);
            setTop(false);
            setMostrarCliente(true);
        }
        loadLists();
        return null;
    }

    /**
     * Realiza la carga inicial de las listas desplegables
     * 
     */
    private void loadLists(){
        try {
            setCiudades(SelectUtil.listCiudades(getUtils().consultarCiudades()));
            setClientes(SelectUtil.listClientes(getClienteEjb().mostrarClientes()));
        } catch (Exception e) {
            e.printStackTrace();
            Mensajes.asignarMensajeError("Se produjo un error al cargar las listas");
        }
    }

    /**
     * Accion donde se selecciona el reporte a generar
     * @return regla de navegación
     */
    public String seleccionarReporte(){
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        request.setAttribute(RequestParameters.fechaIni.name(),getFechaIni());
        request.setAttribute(RequestParameters.fechaFin.name(),getFechaFin());


        if(getReporte().equals("1")){
            request.setAttribute(RequestParameters.ciudad.name(),getIdCiudad());
            return ReglasNavegacion.rep_top.toString();
        }else if(getReporte().equals("2")){
            request.setAttribute(RequestParameters.ciudad.name(),getIdCiudad());
            return ReglasNavegacion.rep_ventas.toString();
        }else if(getReporte().equals("3")){
            request.setAttribute(RequestParameters.cliente.name(),getIdCliente());
            System.out.println(" -- idcluiebnte "+getIdCliente());
            return ReglasNavegacion.rep_compras.toString();
        }
        Mensajes.asignarMensajeError("reporte.error.seleccionar");
        return null;
    }

    /**
     * @return the top
     */
    public boolean isTop() {
        return top;
    }

    /**
     * @param top the top to set
     */
    public void setTop(boolean top) {
        this.top = top;
    }

    /**
     * @return the ventas
     */
    public boolean isVentas() {
        return ventas;
    }

    /**
     * @param ventas the ventas to set
     */
    public void setVentas(boolean ventas) {
        this.ventas = ventas;
    }

    /**
     * @return the compras
     */
    public boolean isCompras() {
        return compras;
    }

    /**
     * @param compras the compras to set
     */
    public void setCompras(boolean compras) {
        this.compras = compras;
    }

    /**
     * @return the mostrarCliente
     */
    public boolean isMostrarCliente() {
        return mostrarCliente;
    }

    /**
     * @param mostrarCliente the mostrarCliente to set
     */
    public void setMostrarCliente(boolean mostrarCliente) {
        this.mostrarCliente = mostrarCliente;
    }

    /**
     * @return the reporte
     */
    public String getReporte() {
        return reporte;
    }

    /**
     * @param reporte the reporte to set
     */
    public void setReporte(String reporte) {
        this.reporte = reporte;
    }

    /**
     * @return the opciones
     */
    public List<SelectItem> getOpciones() {
        return opciones;
    }

    /**
     * @param opciones the opciones to set
     */
    public void setOpciones(List<SelectItem> opciones) {
        this.opciones = opciones;
    }

    /**
     * @return the clientes
     */
    public List<SelectItem> getClientes() {
        return clientes;
    }

    /**
     * @param clientes the clientes to set
     */
    public void setClientes(List<SelectItem> clientes) {
        this.clientes = clientes;
    }

    /**
     * @return the ciudades
     */
    public List<SelectItem> getCiudades() {
        return ciudades;
    }

    /**
     * @param ciudades the ciudades to set
     */
    public void setCiudades(List<SelectItem> ciudades) {
        this.ciudades = ciudades;
    }

    /**
     * @return the idCiudad
     */
    public String getIdCiudad() {
        return idCiudad;
    }

    /**
     * @param idCiudad the idCiudad to set
     */
    public void setIdCiudad(String idCiudad) {
        this.idCiudad = idCiudad;
    }

    /**
     * @return the idCliente
     */
    public String getIdCliente() {
        return idCliente;
    }

    /**
     * @param idCliente the idCliente to set
     */
    public void setIdCliente(String idCliente) {
        this.idCliente = idCliente;
    }

    /**
     * @return the fechaIni
     */
    public Date getFechaIni() {
        return fechaIni;
    }

    /**
     * @param fechaIni the fechaIni to set
     */
    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    /**
     * @return the fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * @return the ciudad
     */
    public Ciudad getCiudad() {
        return ciudad;
    }

    /**
     * @param ciudad the ciudad to set
     */
    public void setCiudad(Ciudad ciudad) {
        this.ciudad = ciudad;
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the clienteEjb
     */
    public ClienteServiceLocal getClienteEjb() {
        return clienteEjb;
    }

    /**
     * @param clienteEjb the clienteEjb to set
     */
    public void setClienteEjb(ClienteServiceLocal clienteEjb) {
        this.clienteEjb = clienteEjb;
    }

    /**
     * @return the utils
     */
    public IUtilidades getUtils() {
        return utils;
    }

    /**
     * @param utils the utils to set
     */
    public void setUtils(IUtilidades utils) {
        this.utils = utils;
    }

}
